package com.Reactor3参考文档;

import org.junit.Test;

import reactor.core.scheduler.Schedulers;

import com.Reactor3参考文档.service.UiUtils;
import com.Reactor3参考文档.service.UserService;
import com.Reactor3参考文档.service.FavoriteService;
import com.Reactor3参考文档.service.SuggestionService;
import com.Reactor3参考文档.service.UiList;

public class Demo1 {

	@Test
	public void getFavoritesAndShow(){
		int userId = 5;
		UserService userService = new UserService();
		FavoriteService favoriteService = new FavoriteService();
		SuggestionService suggestionService = new SuggestionService();
		UiList uiList = new UiList();

		userService.getFavorites(userId) // 获取userId为5的用户的我收藏ID的流
	        .flatMap(favoriteService::getDetails) // 我们 异步地转换 它们（ID） 为 Favorite 对象（使用 flatMap），现在我们有了 `Favorite`流。
	        .switchIfEmpty(suggestionService.getSuggestions()) // 一旦 Favorite 为空，切换到 suggestionService。
	        .take(3) // 我们只关注流中的最多3个元素
	        .publishOn(Schedulers.elastic()) // 最后，我们希望在 UI 线程中进行处理
	        .subscribe(uiList::show, UiUtils::errorPopup); // 通过描述对数据的最终处理（在 UI 中显示）和对错误的处理（显示在 popup 中）来触发（subscribe）
	}

}
